import {Toast} from 'vant'

interface GeolocationType {
    lng?: number | string
    lat?: number | string
    address?: string,
    adcode?: number | string,
}

// 声明AMap，也可以选择在d.ts中声明
declare let AMap: any;
declare let RemoGeoLocation: any;


/**
 * 地图hooks
 * 高德地图
 */
export default function () {
    /**
     * 获取当前位置
     */
    const getLocation = async (): Promise<GeolocationType> => {
        const loading = Toast.loading({
            duration: 0,
            message: '正在定位',
            forbidClick: true
        })
        await loadAMap()
        return new Promise((resolve, reject) => {
            AMap.service(['AMap.PlaceSearch'], function () {
                const geolocation = new AMap.Geolocation({
                    enableHighAccuracy: false,//是否使用高精度定位，默认:true
                    timeout: 20000,          //超过10秒后停止定位，默认：无穷大
                    maximumAge: 0,           //定位结果缓存0毫秒，默认：0
                    convert: true,           //自动偏移坐标，偏移后的坐标为高德坐标，默认：true
                    showButton: true,        //显示定位按钮，默认：true
                    buttonPosition: 'LB',    //定位按钮停靠位置，默认：'LB'，左下角
                    buttonOffset: new AMap.Pixel(10, 20),//定位按钮与设置的停靠位置的偏移量，默认：Pixel(10, 20)
                    showMarker: false,        //定位成功后在定位到的位置显示点标记，默认：true
                    showCircle: false,        //定位成功后用圆圈表示定位精度范围，默认：true
                    panToLocation: false,     //定位成功后将定位到的位置作为地图中心点，默认：true
                    zoomToAccuracy: false,      //定位成功后调整地图视野范围使定位位置及精度范围视野内可见，默认：false
                })

                //@ts-ignore
                geolocation.getCurrentPosition((status: any, result: any) => {
                    if (result && result.position) {
                        console.log(result, '定位完成！')
                        let {
                            position: {lng, lat},
                            formattedAddress,
                            addressComponent: {adcode},
                        } = result

                        const location = {
                            lng,
                            lat,
                            address: formattedAddress,
                            adcode,
                        }
                        resolve(location)
                    } else {
                        reject(result)
                    }
                    loading.clear();
                })
            })

        })

    }
    return {getLocation}
}

/**
 * 加载高德地图
 */
function loadAMap() {
    return new Promise(function (resolve, reject) {
        let hasLoaded1 = document.getElementById('amap')
        if (hasLoaded1) { // 只加载一次
            //@ts-ignore
            resolve(AMap)
            return
        }
        //@ts-ignore
        window.initAMap = function () {
            //@ts-ignore
            resolve(AMap)
        }
        let script = document.createElement('script')
        script.src = '//webapi.amap.com/maps?v=1.4.6&key=7e65b10b787e1e11949360aa4e4b4007&plugin=AMap.Geolocation,AMap.Geocoder,AMap.Driving,AMap.ToolBar,AMap.Scale,AMap.OverView,AMap.ToolBar,AMap.MapType,AMap.Autocomplete,AMap.PlaceSearch,AMap.PolyEditor&callback=initAMap'
        script.id = 'amap'
        script.onerror = reject
        document.head.appendChild(script)
    })
}
